1 Hadoop的HA机制
正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制。
Hadoo的HA机制可以分成各个组件的HA机制
- HDFS的HA
- YARN的HA
1.1 HDFS的HA
- 通过双NameNode消除单点故障
双NameNode工作要点如下:
- A. 元数据管理方式需要改变
- 双NameNode各自在内存中保存一份元数据(fsimage+edits合成结果)
- edits日志只能有一份,只有Active状态的NameNode节点可以对其进行写操作
- 双NameNode都可以读取edits
- 共享的edits仿造一个共享的存储介质中管理(qjournal和NFS两个主流实现)
B. 需要一个状态管理功能模块
- 实现了一个ZKFC(ZooKeeperFailContrl),常驻在每一个NameNode所在的节点
- 每一个ZKFC负责监控自己所在的NameNode节点,利用ZK进行状态标识
- 当需要进行状态切换时,由ZKFC来负责切换(RPC调用NameNode中的方法)
- 切换时需要放置BrainSplit(多个NameNode都是Active状态)现象的发生(新Active节点主动发送杀死被取代Active状态的节点的命令,防止假死)
- A. 元数据管理方式需要改变
1.2 Yarn的HA
- 双ResourceManager消除单点故障
双RM工作要点如下:
- A. 直接由ZooKeeper检测双节点状态。
B. 假设Application在请求资源的过程中,当前Active状态的RM发生故障,则直接重新发送请求,并不产生严重影响。
2 HA环境搭建
2.1 集群节点规划
2.1.1 10节点规划
节点名称 | 节点服务 | 备注 |
---|---|---|
Server01 | NameNode、ZKFC | start-dfs.sh |
Server02 | NameNode、ZKFC | |
Server03 | ResourceManager | |
Server04 | ResourceManager | |
Server05 | DataNode、NodeManager | start-yarn.sh |
Server06 | DataNode、NodeManager | |
Server07 | DataNode、NodeManager | |
Server08 | JournalNode、ZooKeeper | |
Server09 | JournalNode、ZooKeeper | |
Server10 | JournalNode、ZooKeeper |
2.1.2 3节点规划
节点名称 | 节点服务 | 备注 |
---|---|---|
Server01 | NameNode、ZKFC、ResourceManager、NodeManager、DataNode、ZooKeeper、JournalNode | |
Server02 | NameNode、ZKFC、ResourceManager、NodeManager、DataNode、ZooKeeper、JournalNode | |
Server03 | DataNode、NodeManager、ZooKeeper、JournalNode |
2.2 配置文件
core-site.xml
|
|
hdfs-site.xml
|
|
3 集群运维测试
3.1 DataNode动态上下线
Datanode动态上下线很简单,步骤如下:
- 准备一台服务器,设置好环境
- 部署hadoop的安装包,并同步集群配置
- 联网上线,新datanode会自动加入集群
- 如果是一次增加大批datanode,还应该做集群负载重均衡
3.2 NameNode状态切换管理
使用的命令上hdfs haadmin
可用 hdfs haadmin –help查看所有帮助信息
可以看到,状态操作的命令示例:
- 查看namenode工作状态
hdfs haadmin -getServiceState nn1
- 将standby状态NameNode切换到active
hdfs haadmin –transitionToActive nn1
- 将active状态NameNode切换到standby
hdfs haadmin –transitionToStandby nn2
3.3 数据块的Balance
- 启动balancer的命令:
start-balancer.sh -threshold 8
- 运行之后,会有Balancer进程出现。
- 上述命令设置了Threshold为8%,那么执行balancer命令的时候,首先统计所有DataNode的磁盘利用率的均值,然后判断如果某一个DataNode的磁盘利用率超过这个均值Threshold,那么将会把这个DataNode的block转移到磁盘利用率低的DataNode,这对于新节点的加入来说十分有用。Threshold的值为1到100之间,不显示的进行参数设置的话,默认是10。
3.4 HA下HDFS-API的变化
客户端需要nameservice的配置信息,其他不变
|
|